import fetch from 'dva/fetch'
/**
 * 1、fetch是内置函数，不需要从dva导出
 */
function getLoaclUser(){
    var user=JSON.parse(window.localStorage.getItem("yuntu-map-auth-user"));
    if(user){
        return "Bearer " + user.token;
    }else{
        return ""
    }
}
/**
 * 
 * @param {*} url  请求地址 
 * @param {*} data  请求参数，默认会被转为json
 * @param {*} success 可选 成功回调，如果你只是发请求给服务端，不关心返回
 * @param {*} error 可选 错误回到哦
 * @param {*} method 可选：默认值get
 * @param {*} isFormData 可选 是否是FormData类型，上传文件时候用
 */
export default async function(url,data,success,error,method,isFormData){
    let body;
    if(isFormData){
        body=data;
    }else{
        body=JSON.stringify(data);
    }
    fetch(url,{
        method:method?method:"POST",
        headers:{ 
            'Accept': 'application/json',
            'Content-Type': 'application/json;charset=UTF-8',
            'Access-Token': getLoaclUser()              //使用header存储token信息，不是cookie.
        },
        body:body,
        //credentials: 'include'                        //用于决定fetch是否携带cookie，http请求头增加Cookie请求头
    }).then(function(response){
        if(response.status=="200"){
            return response.json()
        }else{
            /**
             *  此种场景发生在request("http://localhost:8094/user/getser")请求了服务端，服务端也响应了，
             *      但是地址写错了应该是getUser，服务端报404错误的场景，当然只要不是200，都走的这个分支，
             *      比如500、403......
             *      此时控制台会泛红，因此整个fetch需要try...catch...
             */
            console.log("服务端响应发生错误，错误状态码为：" + response.status);
        }
    }).then(function(data){        
        /**
         *  所有的成功都走此条线路，但当服务端使用jwt验证后，拦截器验证未通过也会走此条线路，你简单的验证，让拦截器
         *      取不到Access-token就会发生“请求成功、但验证未通过的场景”,
         *      另外需要注意的是
         */
        if(data.state){    //都是成功的http请求，一切交互都正常
            success(data);           
        }else{             //业务请求失败的情况 
            if(data.code=="401"){
                console.log("当前请求正常，只是登录验证失效，请重新登录");
                window.location.href="/login"         
            }else{
                error(data);
            }
        } 
    }).catch(function(err){   
        /**
         *  此错误场景是 request("http://localhost:8094/user/getUser")当请求这个地址，服务端没有开，
         *      因此任何响应都没有，与上面的响应了，但响应404、500......是不一样的。
         */
        console.log(err);
        error(err);
    });
}

//使用示例
// request("http://localhost:8092/todo/getAllTodos","",function(data){
//     console.log(data);
// },function(err){
//     console.log(err);
// },"POST");